package com.demo.common.ip2region.strategy;

import lombok.extern.slf4j.Slf4j;
import org.lionsoul.ip2region.xdb.Searcher;

import java.io.IOException;

/**
 * @Author：DayDayUp
 * @Create：2023/2/6 9:35
 */
@Slf4j
public class Ip2RegionByIndex implements Ip2RegionStrategy {

    private Searcher searcher;

    public Ip2RegionByIndex(String dbFile) {
        try {
            // 1、从 dbPath 中预先加载 VectorIndex 缓存，并且把这个得到的数据作为全局变量，后续反复使用。
            byte[] vIndex = Searcher.loadVectorIndexFromFile(dbFile);
            // 2、使用全局的 vIndex 创建带 VectorIndex 缓存的查询对象。
            searcher = Searcher.newWithVectorIndex(dbFile, vIndex);
        } catch (IOException e) {
            log.error("failed to create vectorIndex cached searcher with `{}`：", dbFile, e);
        }
    }

    @Override
    public String search(String ip) {
        // 3、查询
        try {
            return searcher.search(ip);
        } catch (Exception e) {
            log.error("Ip2RegionByIndex ip转换异常",e);
            return null;
        }
    }

    @Override
    public void destroy() throws Exception {
        // 4、关闭资源
        searcher.close();
    }
}
